/* RawToAscii.h
 * 
 *  Author          : Alexander J. Yee
 *  Date Created    : 01/14/2018
 *  Last Modified   : 02/10/2018
 * 
 */

#pragma once
#ifndef ydv_DigitViewer_RawToAscii_H
#define ydv_DigitViewer_RawToAscii_H
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
//  Dependencies
#include "PublicLibs/Types.h"
#include "PublicLibs/BasicLibs/Concurrency/BasicParallelizer.h"
namespace DigitViewer2{
namespace RawToAscii{
    using namespace ymp;
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
//  Returns true if an invalid digit has been detected.
bool dec_to_raw(char* raw, const char* dec, upL_t digits);
bool hex_to_raw(char* raw, const char* hex, upL_t digits);
bool raw_to_dec(char* dec, const char* raw, upL_t digits);
bool raw_to_hex(char* hex, const char* raw, upL_t digits);
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
//  Parallelized wrapper for the above functions.
using ConvertFunction = bool (*)(char* dec, const char* raw, upL_t digits);
bool parallel_convert(
    ConvertFunction convert,
    char* output, const char* input, upL_t digits,
    BasicParallelizer& parallelizer, upL_t tds
);
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
}
}
#endif
